import http from 'wechat-http'
//  配置接口基础路径
http.baseURL = 'https://live-api.itheima.net'
// 请求拦截器
http.intercept.request = (config) => {
  // config 是请求相关的信息
  console.log(config);
  // 统一为没一个接口添加 Authorization 请求头， 值是 token
  const token = getApp().token
  // token 存在 并且调佣的借口不是刷新 token 接口时， 才加上请求 Authorization = token
  if (token && !config.url.includes('/refreshToken')) {
    // 如果请求信息中有 header， 就使用 header 本身， 如果没有header， 给它赋值为一个空对象
    config.header = config.header || {}
    // 将 token 添加到 请求头中
    config.header.Authorization = token
  }
  return config


}
// 响应拦截器
http.intercept.response = async (res) => {
  console.log(res);
  // 判断接口返回的状态码， 如果是401 代表token失效  
  if (res.statusCode === 401) {
    // 如果刷新接口返回401，代表refreshToken失效，  要退出登录
    if (res.config.url.includes('/refreshToken')) {
      // 获取页面历史栈
      const pageStack = getCurrentPages()
      const currentPage = pageStack[pageStack.length - 1]
      // 跳转到登录页
      wx.redirectTo({
        url: `/pages/login/index?returnUrl=/${currentPage.route}`

      })
      return res.data
    }
    // 调用刷新  token 接口， 并以请求头的方式将 refreshToken 传递给后端
    const { code, data } = await wx.http({

      url: '/refreshToken',
      method: 'post',
      header: {
        Authorization: getApp().refreshToken

      }
    })
    if (code !== 10000) return wx.utils.toast()
    // 把刷新token将接口返回的最新的 token 和 refreshToken 存储起来
    getApp().setToken(data.token, data.refreshToken)
    // 重新调用之前401的借口 拿到正确的数据返回
    const result = await wx.http({
      ...res.config
    })
    return result
  }
  // 解套
  // 剥离无用的数据
  return res.data
}
// 挂载方法到全局
wx.http = http

//  模块导出
export default http